﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sireass.Bl;
using Csla;
using Telerik.Web.UI;
using Sireass.Asp.Util;

namespace Sireass.Asp.Administracion
{
    public partial class CatalogoPryecto : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Security.ValidarSeguridad(Response, HttpContext.Current.User.Identity, typeof(ProyectoList));

                CargaCombos();
                CargaGridProyectos();
            }
        }

        private void CargaCombos()
        {
			//Catalogo Programa
			radCmbPrograma.DataSource = NombreValorList.GetNombreValorList(new SingleCriteria<string>("Cat_Programa"));
			radCmbPrograma.DataBind();

            //Catalogo Unidad Resposable
            radCmbUnidadResponsable.DataSource = NombreValorList.GetNombreValorList(new SingleCriteria<string>("Cat_UnidadResponsable"));
            radCmbUnidadResponsable.DataBind();

            //Catalogo Responsable
            radCmbResponsable.DataSource = NombreValorList.GetNombreValorList(new SingleCriteria<string>("Cat_Responsable"));
            radCmbResponsable.DataBind();

            //Carrera
            radCmbCarrera.DataSource = NombreValorList.GetNombreValorList(new SingleCriteria<string>("Cat_Carrera"));
            radCmbCarrera.DataBind();

            //Encargado
            radCmbEncargado.DataSource = NombreValorList.GetNombreValorList(new SingleCriteria<string>("Cat_Encargado"));
            radCmbEncargado.DataBind();
        }

        private void CargaGridProyectos()
        {
            RadGridProyectos.DataSource = ProyectoList.GetProyectoList();
            RadGridProyectos.DataBind();
        }

        #region Grid
        protected void RadGridProyectos_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
        {
            try
            {
                string comando = e.CommandName;
                long idProyecto = default(long);
                switch (comando)
                {
                    case "Nuevo":
                        lblAccion.Text = "Nuevo Proyecto";
                        mvwAdmProyecto.ActiveViewIndex = 1;

                        break;
                    case "Editar":
                        idProyecto = (long)RadGridProyectos.MasterTableView.Items[e.Item.ItemIndex].GetDataKeyValue("IdProyecto");
                        ViewState["vwProyectoEditar"] = idProyecto;

                        if (ProyectoConsultar(idProyecto))
                        {
                            lblAccion.Text = "Editar Proyecto";
                            mvwAdmProyecto.ActiveViewIndex = 1;
                            radBtnGuardar.Text = "Actualizar";
                        }
                        else
                            return;
                        break;
                    case "Eliminar":
                        idProyecto = (long)RadGridProyectos.MasterTableView.Items[e.Item.ItemIndex].GetDataKeyValue("IdProyecto");
                        if (ProyectoEliminar(idProyecto))
                        {
                            lblExito.Text = "Operación realizada con éxito";
                            CargaGridProyectos();
                        }
                        break;
                    default: break;
                }
            }
            catch (Exception ex)
            {
                lblError.Text = ex.Message;
            }
        }

        protected void radGrdListado_PageIndexChanged(object sender, GridPageChangedEventArgs e)
        {
            CargaGridProyectos();
        }

        protected void radGrdListado_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
        {
            CargaGridProyectos();
        }

        #endregion

        #region OperacionesCRUD
        protected Boolean ProyectoConsultar(long idProyecto)
        {
            try
            {
                ProyectoEdit consulta = ProyectoEdit.NewProyectoEdit();
                consulta = ProyectoEdit.GetProyectoEdit(idProyecto);

                radTxtClave.Text = Convert.ToString(consulta.ClaveProyecto);
                radTxtNombre.Text = Convert.ToString(consulta.Proyecto);
                radTxtMeta.Text = Convert.ToString(consulta.Meta);
                radTxtObjetivo.Text = Convert.ToString(consulta.Objetivo);
				radCmbPrograma.SelectedValue = Convert.ToString(consulta.IdPrograma);
                radCmbUnidadResponsable.SelectedValue = Convert.ToString(consulta.IdUnidadResponsable);
                radCmbResponsable.SelectedValue = Convert.ToString(consulta.IdResponsable);
                rdpFechaInicioVigencia.SelectedDate = consulta.FechaInicioVigencia;
                rdpFechaFinVigencia.SelectedDate = consulta.FechaFinVigencia;
                chkActivo.Checked = consulta.Habilitado;

                return true;
            }
            catch
            {
                lblError.Text = "Ocurrió un error al consultar los datos del proyecto. Inténtelo de nuevo por favor";
                return false;
            }

        }

        protected Boolean ProyectoInsertar()
        {
            try
            {
                ProyectoEdit insertar = ProyectoEdit.NewProyectoEdit();				
                insertar.ClaveProyecto = radTxtClave.Text.Trim();
                insertar.Proyecto = radTxtNombre.Text.Trim();
                insertar.Objetivo = radTxtObjetivo.Text;
                insertar.Meta = radTxtMeta.Text;
				insertar.IdPrograma = Convert.ToInt64(radCmbPrograma.SelectedValue);
                insertar.IdUnidadResponsable = Convert.ToInt64(radCmbUnidadResponsable.SelectedValue);
                insertar.IdResponsable = Convert.ToInt64(radCmbResponsable.SelectedValue);
                insertar.FechaInicioVigencia = rdpFechaInicioVigencia.SelectedDate.Value;
                insertar.FechaFinVigencia = rdpFechaFinVigencia.SelectedDate.Value;
                insertar.Habilitado = chkActivo.Checked;
                //insertar.FechaAlta = DateTime.UtcNow;

                ProyectoEncargadoEdit proyectoEncargado = ProyectoEncargadoEdit.NewProyectoEdit();
                proyectoEncargado.IdEncargado = Convert.ToInt64(radCmbEncargado.SelectedValue);
                proyectoEncargado.Habilitado = true;
                //proyectoEncargado.FechaAlta = DateTime.UtcNow;

                ProyectoCarreraEdit proyectoCarrera = ProyectoCarreraEdit.NewProyectoEdit();
                proyectoCarrera.IdCarrera = Convert.ToInt64(radCmbCarrera.SelectedValue);
                proyectoCarrera.Habilitado = true;
                proyectoCarrera.FechaAlta = DateTime.UtcNow;

                ActividadMacroEdit actividadMacro = ActividadMacroEdit.NewProyectoEdit();
                actividadMacro.ActividadMacro = radTxtActividadMacro.Text;
                actividadMacro.Orden = 1;
                actividadMacro.Habilitado = true;
                //actividadMacro.FechaAlta = DateTime.UtcNow;

                ProyectoUpdater.Update(insertar, proyectoEncargado, proyectoCarrera, actividadMacro);

                return true;
            }
            catch(Exception ex)
            {
                string err = ex.Message;
                lblError.Text = "Ocurrió un error al crear el proyecto. Inténtelo de nuevo por favor";
                return false;
            }
        }


        protected Boolean ProyectoEditar(long idProyecto)
        {
            try
            {
                ProyectoEdit editar = ProyectoEdit.GetProyectoEdit(idProyecto);
                editar.ClaveProyecto = radTxtClave.Text.Trim();
                editar.Proyecto = radTxtNombre.Text.Trim();
                editar.Objetivo = radTxtObjetivo.Text;
                editar.Meta = radTxtMeta.Text;
				editar.IdPrograma = Convert.ToInt64(radCmbPrograma.SelectedValue);
                editar.IdUnidadResponsable = Convert.ToInt64(radCmbUnidadResponsable.SelectedValue);
                editar.IdResponsable = Convert.ToInt64(radCmbResponsable.SelectedValue);
                editar.FechaInicioVigencia = rdpFechaInicioVigencia.SelectedDate.Value;
                editar.FechaFinVigencia = rdpFechaFinVigencia.SelectedDate.Value;
                editar.Habilitado = chkActivo.Checked;
                editar.Save();

                return true;
            }
            catch
            {
                lblError.Text = "Ocurrió un error al guardar los cambios del proyecto. Inténtelo de nuevo por favor";
                return false;
            }
        }

        protected Boolean ProyectoEliminar(long idProyecto)
        {
            try
            {
                ProyectoEdit.DeleteProyectoEdit(idProyecto);
                return true;
            }
            catch
            {
                lblError.Text = "Ocurrió un error al eliminar el proyecto. Inténtelo de nuevo por favor.";
                return false;
            }
        }

        #endregion

        protected void radBtnRegresar_Click(object sender, EventArgs e)
        {
            LimpiarControles();
            mvwAdmProyecto.ActiveViewIndex = 0;
        }

        protected void radBtnGuardar_Click(object sender, EventArgs e)
        {

            RadButton botonAccion = (RadButton)sender;
            if (botonAccion.Text == "Guardar")
            {
                if (ProyectoInsertar())
                    lblExito.Text = "Proyecto agregado con éxito";
            }
            else
            {
                long idProtecto = (long)ViewState["vwProyectoEditar"];
                if (ProyectoEditar(idProtecto))
                {
                    lblExito.Text = "Operación realizada con éxito";
                }
                else
                    return;
            }

            CargaGridProyectos();
            mvwAdmProyecto.ActiveViewIndex = 0;
            LimpiarControles();
        }

        private void LimpiarControles()
        {
            this.radTxtClave.Text = string.Empty;
            this.radTxtNombre.Text = string.Empty;
            this.radTxtObjetivo.Text = string.Empty;
            this.radTxtMeta.Text = string.Empty;
			radCmbPrograma.ClearSelection();
            radCmbUnidadResponsable.ClearSelection();
            radCmbResponsable.ClearSelection();
            rdpFechaInicioVigencia.SelectedDate = null;
            rdpFechaFinVigencia.SelectedDate = null;
            chkActivo.Checked = false;
            radBtnGuardar.Text = "Guardar";
            radCmbCarrera.ClearSelection();
            radCmbEncargado.ClearSelection();
            radTxtActividadMacro.Text = string.Empty;
            ViewState["vwProyectoEditar"] = null;
        }

    }
}